perm filename EXCON.MAC[GPR,LCS] blob
sn#138796 filedate 1975-01-07 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00015 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 TITLE EXCON
C00005 00003 SUBTTL DEFINITIONS G. Ross Explorations, Inc.
C00009 00004 SUBTTL DATA G. Ross Explorations, Inc.
C00012 00005 SUBTTL TTY INPUT AND VERIFICATION G. Ross Explorations, Inc.
C00020 00006 SUBTTL FILE EXPANSION G. Ross Explorations, Inc.
C00028 00007
C00029 00008 SUBTTL FILE DELETION G. Ross Explorations, Inc.
C00033 00009
C00034 00010 SUBTTL FILE LISTING G. Ross Explorations, Inc.
C00038 00011
C00039 00012 SUBTTL FILE COMPACTING G. Ross Explorations, Inc.
C00042 00013 SUBTTL FILE ADDING G. Ross Explorations, Inc.
C00045 00014 SUBTTL SUBROUTINES G. Ross Explorations, Inc.
C00078 00015 SUBTTL HISEG DATA G. Ross Explorations, Inc.
C00081 ENDMK
C⊗;
TITLE EXCON
TWOSEG
SUBTTL REMARKS G. Ross Explorations, Inc.
;
; THE SET UP IN THE EXCON FILE IS A HEADER BLOCK, THE FILE,
; AND TRAILER BLOCK
;
; THE HEADER BLOCK IS PRECEEDED BY "101010,,101010", FOLLOWS
; WITH THE NAME OF THE FILE IN SIXBIT, THE NEXT WORD SIXBIT EXT,,0
; AND THE LAST, RANDOM NUMBER,,DATE:
;
; 010101010101
; SIXBIT/FILE/
; SIXBIT/EXT/
; RNDNUM,,DATE
;
; THE TRAILER IS MADE UP OF THE NUMBER 010101,,010101,
; SIXBIT/FILE/, SIXBIT/EXT/,,SAME RANDOM NUMBER AS IN HEADER:
;
; 010101010101
; SIXBIT/FILE/
; SIXBIT/EXT/,,RNDNUM
;
; EXCON IS COMPATIBLE WITH THE OLD EXCON OFF OF THE DECUS TAPES
; HELP FILE IS SYS:EXCON.HLP
SUBTTL DEFINITIONS G. Ross Explorations, Inc.
;
; ACS:
;
P==17 ;PUSH DOWN AC
F==16 ;FLAG AC, FUNC FLAGS IN LEFT, OTHERS IN RIGHT
FILE.==12 ;CONTAINS SIXBIT/FILE/ OF CURRENT FILE
EXT.==13 ;CONTAINS SIXBIT/EXT/
DEV.==14 ;CINTAINS SIXBIT/DEV/
PPN.==15 ;CONTAINS P,PN
PNT==11 ;POINTER
CHRCNT==10
DATE.==10
CNT==10
FILE2.==6 ;NEW FILE NAME FROM LEFT FILE LIST
EXT2.==7 ;NEW EXT
XFER==5 ;CONTAINS TRANSFER ADR ON EOF
;
; FLAGS: LEFT HALF:
;
A==1 ;ADDING
C==2 ;COMPACTING
D==4 ;DELETING
E==10 ;EXPANDING
L==20 ;LISTING
;
; RIGHT HALF:
;
XSEEN==1 ;A /X WAS SEEN
ANYCHR==2 ;IF ON, CMDCHR PASSES ANY KIND OF CHARACTER
ARWSEN==4 ;A BACK ARROW WAS SEEN
FILSEN==10 ;A FILE WAS SEEN ON INPUT
FILST==20 ;WE HAVE TWO FILE LISTS
TYPPPN==40 ;DETERMINES IF TO TYPE THE PPN OF THE FILE
FILSPC==100 ;IF FILES WERE SPECIFIED
TTYOUT==200 ;DOING TTY OUTPUT NOT DSK
CHRTYP==400 ;SOMETHING WAS TYPED ON INPUT LINE
DSKUFD==1000 ;WERE WORKING ON A DSK UFD
DTAUFD==2000 ;WERE WORKING ON A DTA DIRECTORY
UFDERR==4000 ;ERROR READING THE UFD
SKPFLG==10000 ;WE ARE IN SKPFIL
FILINC==20000 ;IF 0, DON'T INCREMENT FILE PNT
RENMES==40000 ;SKIP MES "UNABLE TO FORM .BAK..."(RENERR)
;
IFNDEF DIRFIL,<DIRFIL==↑D200> ;NUMBER OF FILES FOR IN CORE DIRECTORY
IFNDEF TTYFIL,<TTYFIL==↑D50> ;NUMBER OF FILES ACCEPTED FROM TTY
IFNDEF PDLEN,<PDLEN==↑D15> ;LENGTH OF PUSH DOWN LIST
IFNDEF CCLEN,<CCLEN==↑D32> ;LENGTH OF TMPCOR BLOCK
;
VWHO==3 ;WHO MADE EXCON
VMAJOR==3 ;MAJOR VERSION NUMBER
VMINOR==0 ;MINOR VERSION NUMBER
VEDIT==27 ;EDIT NUMBER
;
LOC 124 ;REENTERY POINT
EXP RENTER
LOC 137 ;VERSION
BYTE (3) VWHO (9) VMAJOR (6) VMINOR (18) VEDIT
RELOC
;
; DEVCHR DEFINITIONS:
;
DV.DSK==200000 ;DEVICE IS A DSK
DV.CDR==100000 ;DEVICE IS A CDR
DV.LPT==40000 ;DEVICE IS A LPT
DV.PTP==400 ;A PTP
DV.PTR==200 ;A PTR
DV.DTA==100 ;A DTA
DV.MTA==20 ;A MTA
DV.TTY==10 ;A TTY
DV.AVL==40 ;DEVICE IS AVAILABLE FOR OUR USE
;
; FILE STATUS DEFINITIONS:
;
IO.IMP==400000 ;IMPROPER MODE, SOFTWARE WRITE LOCK
IO.DER==200000 ;DATA MISSED
IO.DTE==100000 ;PARITY ERROR
IO.BKT==40000 ;BLOCK TOO LARGE
;
MARK==100000 ;MARKS A FILE IN DIRECT FOR USE
;
; MACRO TO GENERATE THE ASCII OF THE MONTHS AND "-" THERE TO
;
DEFINE MONGEN(A)<
IRP A,<
BYTE (21) "A" (7) "-"
>>
SUBTTL DATA G. Ross Explorations, Inc.
FILES: BLOCK <TTYFIL*5>+1 ;WHERE INPUT FILE NAMES ARE STORED:
;SIXBIT/FILE/
;XWD "EXT",EXT QUESTION MASK
;SIXBIT/DEVICE/
;XWD P,PN
;FILE QUESTION MARK MASK
DIRECT: BLOCK <DIRFIL*4>+1 ;CONTAINS IN CORE DIRECTORY OF EXCON FILE:
;SIXBIT/FILE/
;XWD "EXT",DATE
;SIXBIT/DEVICE/
;XWD P,PN
PDL: BLOCK PDLEN ;PUSH DOWN STACK
FILPTR: Z ;FILE POINTER INTO FILES WHEN LOADING IT
CURDEV: Z ;CURRENT DEVICE NAME
ARROW: Z ;POINTS TO FILE AFTER BACK ARROW IN FILES
JOBPPN: Z ;USERS PPN
FILEND: Z ;POINTS JUST BEYOND END OF FILES
CCL: Z ;TO REMEMBER THE CCL ENTRY
CCLPNT: Z ;POINTER TO THE TMPCOR BUFFER
SYSBLK: 17 ;OPEN BLOCK FOR HELP FILE
SIXBIT/SYS/ ;DUMP MODE
Z
SYSHLP: SIXBIT/EXCON2/ ;HELP FILE NAME
SIXBIT/HLP/
Z
Z
HLPWRD: IOWD 200,DTANAM ;IO WORD TO LOAD BLOCK OF HELP TEXT
Z
OPBLKI: 10 ;STANDARD INPUT OPEN BLOCK
Z ;DEVICE NAME
XWD 0,IBUF ;BUFFER HEADER
OPBLKO: 10 ;STANDARD OUTPUT OPEN BLOCK
Z ;DEVICE NAME
XWD OBUF,0 ;BUFFER HEADER
OPZ: 17 ;DUMP MODE
Z ;DEVICE NAME
Z ;NO BUFFERS
OPBLKR: BLOCK 3 ;RENAME OPEN BLOCK
OBUF: BLOCK 3 ;OUTPUT BUFFER HEADER
IBUF: BLOCK 3 ;INPUT BUFFER HEADER
ZEROS: BLOCK 4 ;DELETE BLOCK
XDEV: Z ;DEVICE NAME FOR /X
XPPN: Z ;PPN FOR /X
OPUFD: BLOCK 3 ;OPEN BLOCK FOR UFD
UFDBUF: BLOCK 3 ;UFD BUFFER HEADER
DTAWRD: IOWD 177,DTANAM ;IOWORD TO READ DTA DIRECTORY
Z
DTANAM: BLOCK 201 ;PLACE FOR DTA DIRECTORY AND HELP TEXT
CCLBLK: SIXBIT/XCN/ ;NAME OF TMPCOR FILE
IOWD CCLEN,CCLBUF ;POINTER FOR THE MONITOR
Z ;AND ZERO FOR DSK:JBNXCN.TMP IF NECESSARY
CCLBUF: BLOCK CCLEN+1 ;ROOM TO READ IN TMPCOR
SUBTTL TTY INPUT AND VERIFICATION G. Ross Explorations, Inc.
RELOC 400000
START: TDZA ;REMEMBER NORMAL ENTRY POINT INTO EXCON
SETO ;SET FOR CCL ENTRY
MOVEM CCL ;SAVE IT FOR USE
GETPPN ;GET THE PPN OF THIS JOB
JFCL ;DON'T CARE ABOUT OTHER JOBS
MOVEM JOBPPN ;SAVE IT
RENTER: RESET ;REENTRY POINT; RESET
SETZB F,ARROW ;NO FLAGS, NO BACK ARROW SEEN
SETZB CHRCNT,FILPTR ;NO CHRCNT,FILPTR POINTS TO BEGIN OF FILES
MOVSI 'DSK' ;DEFAULT OF DSK:
MOVEM CURDEV ;TELL THE WORLD
MOVEM XDEV ;DEFAULT FOR /X TOO
MOVE JOBPPN ;GET USERS PPN
MOVEM XPPN ;DEFAULT FOR /X ALSO
MOVE P,[IOWD PDLEN,PDL] ;SETUP PUSH DOWN LIST
SKIPE CCL ;WAS IT A CCL ENTRY?
PUSHJ P,SETCCL ;YES, SET UP THE TMPCOR BUFFER
SKIPN CCL ;NO STAR IF CCL ENTRY
PUSHJ P,TYPSTR ;TELL THE USER WE'RE READY
MOVEI CNT,TTYFIL-1 ;WE WON'T GET MORE THAN <TTYFIL> FROM THE TTY
PUSHJ P,GETFIL ;GET A FILE
SOJGE CNT,.-1 ;GO FOR MORE IF ROOM AND IS MORE COMING
SKIPN ARROW ;ARROW SEEN?
JRST NOARRW ;NO
JUMPL 10,MNYFIL ;TOO MANY FILES?
TLNN F,E!A!C!L!D ;SWITCH SEEN?
JRST NOFUNC ;NO
MOVE ARROW ;OK CHECK FOR MANY THINGS
CAMN FILEND ;NULL RIGHT SIDE?
JRST NULR ;YES
TLNE F,E ;EXPANDING?
JRST XPNCHK ;GO THERE TO GET RIGHT ADR
TLNN F,L ;LISTING?
JRST .+3 ;NO
TRNE F,XSEEN ;YES, OUTPUT DEVICE SETUP?
JRST LIST ;YES, GO LIST
CAIN FILES ;NULL LEFT SIDE?
JRST NULL ;YES
CAIN FILES+5 ;FILE LIST ON LEFT SIDE?
JRST FILCHK ;NO, SKIP FILE LIST LENGTHS CHECK
TLNE F,D!L ;/D OR /L HAVE A FILE LIST ON THE LEFT SIDE?
JRST LSTSEN ;IT DOES! NO GOOD!
MOVEI 1,FILES+5 ;GET ADR OF BEGIN OF RIGHT LIST
LSTCHK: TRO F,FILST ;THERE IS A FILE LIST ON LEFT SIDE
SUBM 1 ;GET LENGTH OF LEFT FILE LIST
MOVE 2,FILEND ;GET FILES END
SUB 2, ;GET LENGTH OF RIGHT FILE LIST
TLNE F,E ;EXPANDING?
SUBI 2,5 ;RIGHT LIST OFF BY 5 GET RID OF IT
CAME 2,1 ;ARE THEY EQUAL?
JRST BADLST ;NO
FILCHK: MOVEI 1,FILES ;GET THE EXCON FILE NAME
TLNE F,E ;ARE WE EXPANDING?
MOVE 1,ARROW ;THEN GET THE RIGHT ADR
PUSHJ P,WLDCHK ;CHECK FOR WILD CARDING
JRST NOWILD ;WE DON'T WANT WILD CARDING IN EXCON FILE NAME
HLLZ 1(1) ;GET THE EXT ONLY
MOVEM 1(1) ;PUT IT BACK, ZEROING THE DATE
TLNE F,L ;LISTING?
JRST LIST ;GO DO IT
MOVE 2,2(1) ;GET THE DEVICE OF THE EXCON FILE
DEVCHR 2, ;FIND OUT ABOUT THIS DEVICE
JUMPE 2,NODEV ;NO SUCH DEVICE?
TLNE 2,DV.CDR!DV.LPT!DV.PTP!DV.PTR!DV.MTA!DV.TTY ;A DECENT DEVICE?
JRST BADEV ;NO
TLNN 2,DV.AVL ;IS THE DEVICE AVAILABLE?
JRST NOTAVL ;NO
TLNE F,C ;COMPACTING?
JRST COMPAC ;GO TO WORK
PUSHJ P,XCNCHK ;CHECK FOR XCN EXT
JRST RENTER ;CAN'T GET THAT FILE?
MOVE DEV.,OPBLKI+1 ;MOVE THE DEVICE TO THE OPEN BLOCK
TLNE F,E ;ARE WE EXPANDING?
JRST EXPAND ;GO TO WORK
TLNN 2,DV.DTA ;IS THE DEVICE A DTA?
JRST RENAM. ;NO, RENAME ORIGINAL FILE
PUSHJ P,DATAIN ;GET THE INPUT BUFFERS SETUP
MOVSI EXT.,'BAK' ;.BAK EXTENSION TO THE DSK
SETZ DEV., ;STANDARD DEFAULTS
MOVE PPN.,JOBPPN ;USE THE USERS PPN
MOVSI 'DSK' ;AND DEVICE DSK
MOVEM OPBLKO+1 ;PUT IT UP FOR THE MONITOR
OPEN 1,OPBLKO ;GET THE DSK FROM THE MONITOR
JRST NODSK ;WE TRIED....
ENTER 1,FILE. ;TELL THE MONITOR ABOUT THIS .BAK FILE
JRST FILINR+1 ;AGAIN, WE TRIED.....
PUSHJ P,OUTIT ;SET UP THE OUTPUT BUFFERS
MOVEI XFER,.+4 ;WHERE TO GO ON AN EOF
PUSHJ P,GETWRD ;GET A WORD FROM THE DTA
PUSHJ P,PUTWRD ;PUT IT IN THE .BAK FILE
JRST .-2 ;AND GO BACK FOR MORE
RELEAS ;HERE ON EOF; RELEAS ALL FILES
RELEAS 1, ;PARTICULARLY THE .BAK ONE
TLNN F,A ;ARE WE ADDING?
JRST DELETE ;NO, MUST BE DELETING...DO IT!
JRST ADD ;GO ADD
RENAM.: MOVSI EXT.,'BAK' ;HERE JUST TO DO A RENAME
SETZM DEV. ;DON'T WANT TO TOUCH THE DATE OR PRO
RENAME FILE. ;TRY IT
JRST .+3 ;LET'S SEE ABOUT AN EXISTING FILE
RELEAS ;GOOD
JRST RENAM.-5 ;GO TO WORK
HRRZ EXT. ;GET THE ERROR CODE
CAIE 4 ;WAS THERE ALREADY A .BAK FILE THERE?
JRST RENERR ;NO, RENAME ERROR
MOVE OPBLKI+1 ;YES, TRY TO DELETE IT. GET THE DSK DEVICE
MOVEM OPBLKR+1 ;PUT IT IN THE RENAME OPEN BLOCK
OPEN 2,OPBLKR ;GET THAT DEVICE
JRST RENERR ;WE TRIED.....
LOOKUP 2,FILE. ;LOOKUP THAT .BAK FILE
JRST .+4 ;WE TRIED.....
RENAME 2,ZEROS ;TRY TO DELETE IT
JRST RENER2 ;WE TRIED.....
RELEAS 2, ;GET RID OF THE CHANEL
JRST RENAM.+1 ;GO TRY TO RENAME TO .BAK
XPNCHK: CAIN FILES ;HERE IF /E TO CHECK FOR FILE LISTS
JRST FILCHK ;NO FILE LIST, SKIP LENGTH CHECK
MOVEI 1,FILES ;FILE LIST, GET PROPER ADR OF RIGHT LIST
JRST LSTCHK ;GO CHECK IT
SUBTTL FILE EXPANSION G. Ross Explorations, Inc.
EXPAND: RELEAS ;RELEAS THE INPUT BECAUSE XCNCHK DOESN'T
MOVE 1,ARROW ;GET ADR OF EXCON FILE
PUSHJ P,MAKDIR ;MAKE THE DIRECTORY OF IT
JRST RENTER ;FILE I/O ERROR
MOVE PNT,[XWD DIRECT,FILES] ;SET UP FOR WLDDIR
MOVE FILE.,ARROW ;SETUP FILE. SO POINTS TO RIGHT LIST
ADDI FILE.,5 ;GO JUST BEYOND EXCON FILE NAME
CAMN FILE.,FILEND ;IS THERE A RIGHT FILE LIST?
JRST ESET ;NO, MARK ALL FILES FOR EXPANDING
MORFIL: PUSHJ P,WLDDIR ;GET A FILE, WLDDIR MARKS IT FOR US
JRST XPNIT ;NO MORE? GO ENTER THE FILES
TRNN F,FILST ;2 FILE LISTS?
JRST NOLIST ;NO, SET DEV AND PPN FROM /X
MOVE 2(PNT) ;GET OUTPUT DEVICE
MOVEM 2(1) ;STORE IT IN DIRECT
MOVE 3(PNT) ;GET LEFT LIST PPN
MOVEM 3(1) ;STORE THAT IN DIRECT
MOVE (PNT) ;GET FILE NAME
CAMN STAR ;SAME AS INPUT FILE NAME?
JRST XPNEXT ;YES, TRY FOR EXTENSION
MOVE (1) ;NO, GET NEW ONE
TDZ 4(PNT) ;GET THE QUESTION MARKS OUT OF NEW FILE
ADD (PNT) ;AND PUT CHAR FROM OLD INTO NEW
MOVEM (1) ;SAVE IT IN DIRECT
XPNEXT: HLLZ 1(PNT) ;GET THE EXT
CAMN STAR ;SAME EXT AS IN RIGHT LIST?
JRST MORFIL ;YES, DONE, GET MORE
MOVE 1(1) ;GET OLD EXT
HRLO 2,1(PNT) ;GET QUESTION MARK MASK
TDZ 2 ;ZERO NON-Q MARKS
ADD 1(PNT) ;ADD IN RIGHT CHARACTERS
HLLM 1(1) ;STORE IT
JRST MORFIL ;GO FOR MORE
NOLIST: MOVE XDEV ;GET /X DEVICE
MOVEM 2(1) ;PUT IT AWAY
MOVE XPPN ;GET /X PPN
MOVEM 3(1) ;PUT IT AWAY IN DIRECT ALSO
JRST MORFIL ;GO FOR MORE
ESET: MOVE DEV.,XDEV ;MARK ALL, GET PROPER DEV
MOVE PPN.,XPPN ;AND PPN
MOVEI 1,MARK ;PUT MARK HERE FOR READY USE
SETZ CNT, ;ZERO CNT INTO DIRECT
SKIPN DIRECT(CNT) ;ARE WE AT THE END OF DIRECT?
JRST XPNIT+2 ;YES, GO EXPAND
ADDM 1,DIRECT+1(CNT) ;MARK THE FILE FOR EXPANSION
MOVEM DEV.,DIRECT+2(CNT) ;SET THE DEVICE
MOVEM PPN.,DIRECT+3(CNT) ;AND PPN
ADDI CNT,4 ;GET TO NEXT FILE IN DIRECT
JRST ESET+4 ;AND GO FOR MORE
XPNIT: TRNN F,FILSPC ;ANY FILES MENTIONED?
JRST NOUSE ;NO
MOVE 1,ARROW ;GET ADR OF EXCON FILE
PUSHJ P,INFILE ;SET UP THE INPUT
JRST RENTER ;BUM FILE
MOVEI XFER,XPNFIN ;SET UP EOF TRANSFER ADR
SETZ CNT, ;ZERO CNT INTO DIRECT
XPNIT2: SKIPN DIRECT(CNT) ;ANY MORE FILES LEFT?
JRST XPNFIN ;NO, DONE!
MOVE EXT.,DIRECT+1(CNT) ;GET EXT. AND DATE
TRNN EXT.,MARK ;MARKED FOR EXPANSION?
JRST NXTXPN ;NO, GO FOR MORE
PUSH P,.JBFF ;SAVE OUR CURRENT CORE ASSIGNMENT
MOVEI 1,DIRECT(CNT) ;GET ADR OF FILE FOR OUTPUT
PUSHJ P,OUTFIL ;SET UP OUTPUT
JRST NXTXPN ;BUM, CAN'T DO IT
PUSHJ P,GETWRD ;GET A PIECE OF DATA
CAME BGNCOD ;IS IT THE BEGINNING OF THE FILE?
JRST .-2 ;NO, GET THAT BEGINGING
PUSHJ P,GETWRD ;GET THE FILE NAME
MOVEM FILE2. ;SAVE IT
PUSHJ P,GETWRD ;GET THE EXTENSION
HLLM EXT2. ;SAVE IT
PUSHJ P,GETWRD ;GET THE RANDOM NUMBER,,DATE
HLRM EXT2. ;SAVE THE RANDOM NUMBER
JRST .+2 ;ENTER LOOP
DUMPIT: PUSHJ P,PUTWRD ;DUMP OUT A WORD
PUSHJ P,GETWRD ;GET A WORD
CAME ENDCOD ;IS IT POSSIBLE THE END OF THE FILE?
JRST DUMPIT ;NO
PUSHJ P,GETWRD ;GET THE FILE NAME
CAME FILE2. ;SAME AS ONE IN BEGINNING
JRST RESTR1 ;NO, RESTORE ENDCOD AND FILE NAME
PUSHJ P,GETWRD ;GET THE EXT,,RANDOM NUMBER
CAME EXT2. ;SAME AS ONE WE'RE EXPANDING?
JRST RESTR2 ;NO, RESTORE ENDCOD, FILE NAME, EXT
RELEAS 1, ;YES, FINISH OFF THE FILE
POP P,.JBFF ;RESTORE THE PREVIOUS CORE ASSIGNMENT
JRST NXTXPN+1 ;GO INCREMENT POINTER INTO DIRECT
NXTXPN: PUSHJ P,SKPFIL ;DON'T EXPAND THIS FILE, SKIP IT
ADDI CNT,4 ;INCREMENT INTO NEXT FILE IN DIRECT
MOVEI 10 ;DUMP MODE EXCEPT FOR TTY AND LPT
TRZE F,TTYOUT ;DO WE NEED TO MOVE IT?
MOVEM OPBLKO ;YES
JRST XPNIT2 ;GO FOR THE NEXT FILE
XPNFIN: RELEAS ;HERE WHEN ALL DONE EXPANDING
RELEAS 1, ;RELEAS ALL CHANELS WE USED
JRST RENTER ;TELL THE USER WE CAN TAKE MORE
RESTR1: PUSH P, ;SAVE THE FILE NAME
MOVE ENDCOD ;RESTORE FIRST WORD WE LOST
PUSHJ P,PUTWRD ;PUT IT INTO OUTPUT FILE
POP P, ;GET THE FILE NAME
JRST DUMPIT ;GO BACK TO MAIN LOOP
RESTR2: PUSH P, ;SAVE EXT WE THOUGHT WE HAD
MOVE ENDCOD ;RESTORE FIRST WORD WE LOST
PUSHJ P,PUTWRD ;DUMP INTO OUTPUT
MOVE FILE2. ;GET FILE NAME
JRST RESTR1+2 ;GO DUMP IT
XPNER2: POP P, ;HERE ON OUTPUT FAILURE
POP P, ;RESTORE THE PUSH DOWN STACK
POP P,.JBFF ;RESTORE THE PREVIOUS CORE ASSIGNMENT
TRO F,SKPFLG ;SET SKIP FLAG
PUSHJ P,SKPFL. ;AND JUMP INTO MIDDLE OF SKPFIL
JRST NXTXPN+1 ;GET NEXT FILE
SUBTTL FILE DELETION G. Ross Explorations, Inc.
DELETE: PUSHJ P,SAVFIL ;SAVE THE REAL EXT AND USE BAK EXT
MOVEI 1,FILES ;GET ADR OF INPUT
PUSHJ P,MAKDIR ;MAKE THE DIRECTORY
JRST RENTER ;BUM FILE, GET OUT
MOVSI PNT,DIRECT ;SETUP FOR WLDDIR
MOVE FILE.,ARROW ;ALSO FOR WLDDIR
PUSHJ P,WLDDIR ;GET A FILE NAME FOR DELETING
JRST .+2 ;READY TO ACTUALLY DELETE
JRST .-2 ;GO FOR ANOTHER FILE
TRNN F,FILSPC ;WAS A FILE SPECIFIED?
JRST DELREN ;NO, RESTORE THE XCN FILE AND BOMB
MOVEI 1,FILES ;GET ADR OF INPUT EXCON FILE
PUSHJ P,INFILE ;SETUP INPUT
JRST RENTER ;BUM FILE, GET OUT
PUSHJ P,RSTFIL ;RESTORE EXCON FILE NAME
MOVEI 1,FILES ;GET THE ADR OF THE EXCON FILE
PUSHJ P,OUTFIL ;ENTER THE OUTPUT
JRST RENTER ;WE TRIED...
SETZ CNT, ;ZERO CNT INTO DIRECT
DEL1: SKIPN DIRECT(CNT) ;ARE WE DONE
JRST DELDON ;YES
MOVE DIRECT+1(CNT) ;IS THIS FILE MARKED FOR DELETION?
TRNN MARK ;..
JRST SAVIT ;NO, PUT IT INTO OUTPUT FILE
PUSHJ P,SKPFIL ;YES, SKIP THIS FILE
ADDI CNT,4 ;GET NEXT FILE IN DIRECT
JRST DEL1 ;GO CHECK THIS ONE FOR DELETION
SAVIT: PUSHJ P,DMPFIL ;DUMP THIS FILE INTO THE OUTPUT FILE
JRST SAVIT-2 ;AND INCREMENT CNT INTO DIRECT
DELDON: RELEAS ;DONE!
RELEAS 1, ;RELEAS BOTH CHANNELS
JRST RENTER ;TELL THE USER WE'RE READY FOR MORE
DELREN: OUTSTR [ASCIZ/?NO FILES SPECIFIED
/] ;WE TRIED TO HELP HIM
TRO F,RENMES ;WE DON'T WANT .BAK FILE MESSAGE TYPED
MOVEI 1,FILES ;RENAME THE FILE BACK TO WHAT IT WAS
PUSHJ P,INFILE ;GET THE FILE
JRST RENERR ;WHERE DID THE FILE GO? I HAD IT!
PUSHJ P,RSTFIL ;RESTORE THE ORIGINAL FILE NAME
MOVE FILE.,FILES ;GET THE FILE NAME
HLLZ EXT.,FILES+1 ;AND THE EXTENSION
SETZB DEV.,PPN. ;LET'S NOT RENAME THE PRO
RENAME FILE. ;RENAME IT BACK
JRST RENERR ;WE WERE ABLE TO DO IT BEFORE!?
RELEAS ;GET RID OF THE FILE
JRST RENTER ;AND TRY AGAIN
SUBTTL FILE LISTING G. Ross Explorations, Inc.
LIST: MOVS PNT,ARROW ;SETUP FOR WLDUFD
TRNE F,XSEEN ;WAS THERE A FILE MENTIONED FOR OUTPUT?
JRST LDEV ;NO USE /X DEV
MOVEI 1,FILES ;GET ADR OF OUTPUT FILE
PUSHJ P,OUTFIL ;SETUP THE OUTPUT
JRST RENTER ;BUM FILE
JRST .+2 ;SKIP OVER DUMPING BUFFER
LIST2: PUSHJ P,OUTIT ;DUMP RET OF BUFFER
PUSHJ P,WLDUFD ;GET A FILE TO LIST
JRST LFIN ;DONE
MOVEI 1,FILE. ;SET ADR OF FILE TO LIST AS RETURNED BY WLDUFD
PUSHJ P,XCNCHK ;CHECK FOR .XCN EXTENSION
JRST LIST2 ;BUM FILE TO BEGIN WITH
RELEAS ;XCNCHK DOES NOT RELEAS THE FILE
PUSH P,PNT ;SAVE PNT
PUSHJ P,MAKDIR ;MAKE THE DIRECTORY
JRST LIST2 ;BUM FILE
SETZ CNT, ;ZERO CNT INTO DIRECT
TYPOUT: MOVEI 1,CRLF ;DUMP OUT A RETURN
PUSHJ P,PUTSTR ;..
SKIPN 1,DIRECT(CNT) ;ARE WE DONE WITH THIS EXCON FILE?
JRST NXTLST ;YES
PUSHJ P,PUTSIX ;DUMP THE FILE NAME
MOVEI 1,[ASCIZ/ /] ;DUMP A COUPLE BLANKS
PUSHJ P,PUTSTR ;..
HLLZ 1,DIRECT+1(CNT) ;GET THE EXT
PUSHJ P,PUTSIX ;DUMP IT
HRRZ DIRECT+1(CNT) ;GET THE DATE
PUSHJ P,PUTDAT ;DUMP IT
ADDI CNT,4 ;GET NEXT FILE ADR IN DIRECT
JRST TYPOUT ;GO LIST IT
LDEV: MOVE FILE.,[SIXBIT/EXCON/] ;HERE IF /X, ASSUME EXCON.OUT IF DSK
MOVSI EXT.,'OUT' ;..
MOVE DEV.,XDEV ;GET THE RIGHT DEVICE
MOVE PPN.,XPPN ;AND PPN (IF DSK)
MOVEI 1,FILE. ;SET ADR OF OUTPUT FILE
JRST LIST+4 ;GO SETUP OUTPUT FILE
LFIN: MOVEI 1,CRLF ;DONE, GIVE A FINAL RETURN
PUSHJ P,PUTSTR ;DUMP IT
RELEAS 1, ;GET RID OF THE CHANNEL
MOVEI 10 ;RESTORE THE RIGHT MODE
MOVEM OPBLKO ;OF OPBLKO
JRST RENTER ;AND ASK FOR MORE
NXTLST: IDIVI CNT,4 ;PRINTING TOTALS; GET NUMBER OF FILES
POP P,PNT ;RESTORE PNT
MOVEI 1,[ASCIZ/
Total of /] ;PRINT INTRO TO NUMBER OF FILES
PUSHJ P,PUTSTR ;DUMP IT
MOVE CNT ;GET CNT IN AC0 FOR DEC PNTING
PUSHJ P,PUTDEC ;DUMP IT
MOVEI 1,[ASCIZ/ file/] ;INDENTIFY THE NUMBER WE TYPED
PUSHJ P,PUTSTR ;DUMP IT
MOVEI "s" ;REMEMBER TO PUT AN S ON
CAIE CNT,1 ;BUT ONLY IF NOT = 1
PUSHJ P,PUTCHR ;DUMP THAT S
MOVEI 1,[ASCIZ/ in /] ;PREVIEW TO FILE NAME
PUSHJ P,PUTSTR ;DUMP IT
MOVE 1,FILE. ;GET ADR OF FILE
PUSHJ P,PUTSXN ;DUMP IT WITH NO TRAILING BLANKS
HLLZ 1,EXT. ;GET THE EXT
JUMPE 1,.+4 ;NULL EXT? DON'T PRINT IT
MOVEI "." ;PRINT A PERIOD
PUSHJ P,PUTCHR ;DUMP IT
PUSHJ P,PUTSIX ;PRINT THE EXTENSION
MOVEI 1,CRLF ;GIVE A RETURN
PUSHJ P,PUTSTR ;DUMP IT
JRST LIST2 ;GO FOR MORE
SUBTTL FILE COMPACTING G. Ross Explorations, Inc.
COMPAC: HLLZ FILES+1 ;GET THE EXCON EXTENSION
JUMPN .+3 ;DON'T TOUCH THE EXT IF THERE
MOVSI 'XCN' ;OTHERWISE ASSUME .XCN
HLLM FILES+1 ;STORE IT FOR OUTFIL
MOVEI 1,FILES ;GET ADR OF EXCON FILE NAME
PUSHJ P,OUTFIL ;SETUP OUTPUT FILE
JRST RENTER ;BUM FILE
MOVS PNT,ARROW ;SETUP FOR WLDUFD
HRRI PNT,FILES+5 ;MORE SETUP
SETZB 4,DIRECT ;DIRECT WILL CONTAIN NAMES ALREADY COMPACTED
MORCOM: PUSHJ P,WLDUFD ;GET A FILE TO COMPACT
JRST COMDON ;DONE!
PUSH P,PNT ;SAVE PNT
MOVE 3,.JBFF## ;SAVE HILOC TO RECLAIM INPUT BUFFER LATER
MOVEI 1,FILE. ;GET ADR OF INPUT FILE NAME
PUSHJ P,INFILE ;SETUP THE INPUT
JRST POPPNT ;BUM FILE, RESTORE PNT, GO FOR MORE
POP P,PNT ;RESTORE PNT
PUSHJ P,NEWFIL ;GET FILE NAME FOR OUTPUT TO EXCON FILE
PUSHJ P,FNDFIL ;SEE IF NAME ALREADY COMPACTED
JRST MORCOM ;YES, SKIP THIS FILE
CAIL 4,<DIRFIL*4> ;CAN WE STORE IT IN DIRECT?
JRST STPCOM ;NO, STOP COMPACTING
MOVEM FILE2.,DIRECT(1) ;STORE OUTPUT FILE NAME IN DIRECT
MOVEM EXT2.,DIRECT+1(1) ;AND ALSO THE EXTENSION
ADDI 4,4 ;GET TO ADR OF NEXT FILE SLOT
SETZM DIRECT(4) ;ZEROED TO DETERMINE END OF DIRECT
PUSHJ P,COMIT ;COMPACT THE FILE
RELEAS ;RELEAS THE INPUT FILE
MOVEM 3,.JBFF ;RECLAIM BUFFER SPACE
JRST MORCOM ;GO COMPACT MORE
COMDON: RELEAS 1, ;RELEAS THE OUTPUT FILE
JRST RENTER ;GO ASK FOR MORE WORK
POPPNT: POP P,PNT ;ERROR RETURN FROM INFILE,RESTORE PNT
JRST MORCOM ;GO FOR MORE COMPACTING
STPCOM: OUTSTR [ASCIZ/?TOO MANY SUBFILES TO COMPACT
/] ;WE OVERFLOWED DIRECT
RELEAS 1, ;LET THE FILE BE
JRST RENTER ;AND GO FOR MORE WORK
SUBTTL FILE ADDING G. Ross Explorations, Inc.
ADD: PUSHJ P,SAVFIL ;SAVE THE REAL EXCON NAME, PUT .BAK IN
MOVEI 1,FILES ;GET ADR OF EXCON FILE
PUSHJ P,MAKDIR ;MAKE THE DIRECTORY OF THE FILE
JRST RENTER ;BUM FILE, GET OUT
MOVS PNT,ARROW ;SET UP FOR WLDUFD
HRRI PNT,FILES+5 ;ALSO SET UP FOR WLDUFD
ADDMOR: PUSHJ P,WLDUFD ;GET A FILE TO ADD
JRST ADDCHK ;DONE FIRST SCAN
PUSHJ P,NEWFIL ;GET THE FILE NAME FROM LEFT FILE LIST
PUSHJ P,FNDFIL ;IS IT IN DIRECT?
JRST ADDMOR ;NO, FILE ALL RIGHT TO ADD
JRST ADDMOR ;YES, BUT IT WAS MARKED BY FNDFIL
ADDCHK: MOVEI 1,FILES ;GET ADR OF EXCON FILE
PUSHJ P,INFILE ;SETUP INPUT
JRST RENTER ;BUM FILE, GET OUT
PUSHJ P,RSTFIL ;RESTORE THE REAL EXCON NAME
MOVEI 1,FILES ;GET THE ADR OF THE EXCON FILE AGAIN
PUSHJ P,OUTFIL ;SET UP THE OUTPUT FILE
JRST RENTER ;BUM FILE, GET OUT
SETZ CNT, ;ZERO CNT INTO DIRECT
MOVEI XFER,ADDEOF ;IF WE GET AN EOF UNEXPECTEDLY
TRO F,SKPFLG ;MAKE SURE THE POP CHAIN IS RIGHT
GETMOR: SKIPN DIRECT(CNT) ;ARE WE AT THE END OF DIRECT?
JRST ADDONE ;YES, GO COMPAC
MOVE DIRECT+1(CNT) ;GET THE EXTENSION
TRNE MARK ;IS IT MARKED FOR DELETION?
JRST DELIT ;YES, DELETE IT
PUSHJ P,DMPFIL ;NO, DUMP IT INTO THE OUTPUT FILE
ADDI CNT,4 ;GET NEXT FILE IN DIRECT
JRST GETMOR ;AND SEE ABOUT THAT ONE
DELIT: PUSHJ P,SKPFIL ;SKIP OVER THE FILE
JRST DELIT-2 ;AND GO INCREMENT THE FILE COUNTER
ADDEOF: MOVE ENDCOD ;UNEXPECTED EOF; MAKE IT EXPECTED
PUSHJ P,PUTWRD ;PUT AN ENDCOD
MOVE FILE2. ;GET THE FILE NAME
PUSHJ P,PUTWRD ;PUT THAT IN THE OUTPUT FILE
MOVE EXT2. ;GET THE EXT,,RANDOM NUMBER
PUSHJ P,PUTWRD ;AND PUT THAT OUT
ADDONE: RELEAS ;RELEAS THE INPUT
TRZ F,SKPFLG!FILINC ;TURN OFF FOR WLDUFD AND POPING RIGHT
JRST MORCOM-3 ;AND START COMPACTING
SUBTTL SUBROUTINES G. Ross Explorations, Inc.
;
; GETFIL GETS ONE FILE OFF THE TTY AND PROCESS ANY SWITCHES,
; BACK ARROWS, EXTRANIOUS CHARACTERS, ETC...
; THE FILE IS PLACED IN @FILPTR, AND FILPTR IS INCREMENTED
; BY FIVE AFTERWARDS. THE FORMAT IS:
;
; SIXBIT/FILE/
; XWD "EXT",EXT Q MARK MASK
; SIXBIT/DEVICE
; XWD P,PN
; FILE Q MARK MASK
;
; WHERE Q MARK MASK IS 0 WHERE A QUESTION MARK(S) IS SEEN
; OTHERWISE FILLED WITH ONES
;
; RETURN IS TO CALL+1 IF NO MORE IS WAITING FROM THE TTY
; OTHERWISE CALL+2
;
; CMDCHR IS THE ROUTINE THAT GETS ONE CHARACTER OFF THE TTY
; CHECKS FOR VALIDITY AND PASSES IT BACK IN AC0
;
GETFIL: SKIPN DEV.,CURDEV
JRST CPOPJ1
MOVEI 3,6
MOVE 5,[POINT 6,FILES]
ADD 5,FILPTR
MOVE 4,[POINT 6,FILES+4]
ADD 4,FILPTR
MOVEM DEV.,2(5)
MOVE JOBPPN
MOVEM 3(5)
HRRZI -1
MOVEM 1(5)
SETZM (5)
SETOM (4)
TRZ F,FILSEN
NXTCHR: PUSHJ P,CMDCHR
MOVEI 2,BRKCNT
MOVE 1,BRKTAB(2)
CAIN (1)
JRST BREAK
SOJGE 2,.-3
SOJL 3,NXTCHR
IBP 4
CAIE "?"
JRST .+4
SETZ
DPB 4
JRST TAKCHR+1
TAKCHR: SUBI 40
IDPB 5
TRO F,FILSEN
JRST NXTCHR
BREAK: MOVS 1,1
JRST (1)
BRKTAB: XWD CR,0
XWD CONTIN,"+"
XWD SWITCH,"/"
XWD DEVICE,":"
XWD EXT,"."
XWD BAKARW,"←"
XWD BAKARW,"="
XWD COMMA,","
XWD RUNIT,"!"
XWD PPN,"["
XWD NXTCHR,40
XWD NXTCHR,11
BRKCNT=.-BRKTAB-1
CR: TRNN F,CHRTYP
JRST RENTER
SETZM CURDEV
MOVE 1,FILPTR
MOVEI 1,FILES(1)
TRNE F,FILSEN
ADDI 1,5
MOVEM 1,FILEND
POPJ P,
BAKARW: TROE F,ARWSEN
JRST MNYARW
TRNN F,FILSEN
JRST SETARW
MOVEI 1,FILES+5
ADD 1,FILPTR
MOVEM 1,ARROW
MOVSI 'DSK'
MOVEM CURDEV
COMMA: MOVEI 5
ADDM FILPTR
POPJ P,
SETARW: MOVEI FILES
ADD FILPTR
MOVEM ARROW
MOVSI 'DSK'
MOVEM CURDEV
JRST GETFIL
DEVICE: MOVE (5)
SETZM (5)
MOVEM 2(5)
MOVEM CURDEV
HRLI 5,440600
HRLI 4,440600
SETOM (4)
MOVEI 3,6
JRST NXTCHR
EXT: MOVEI 3,3
HRLI 4,220600
SUBI 4,3
HRLI 5,440600
AOJA 5,NXTCHR
RUNIT: PUSHJ P,CMDCHR
JUMPN RUNIT
MOVE 1,FILPTR
MOVE 10,FILES+2(1)
MOVE 11,FILES(1)
HLLZ 12,FILES+1(1)
SETZ 13,
MOVE 14,FILES+3(1)
SETZ 15,
MOVE [XWD 10,DIRECT]
BLT DIRECT+5
MOVE [XWD 1,DIRECT]
RUN
HALT
SWITCH: PUSHJ P,CMDCHR
JUMPE BADFNC
CAIN "H"
JRST HELP
CAIN "X"
JRST XSWIT
CAIN 40
JRST SWITCH+2
TLNE F,A!C!D!E!L
JRST DBLSWI
MOVEI 2,SWCNT
MOVE 1,SWTAB(2)
CAIN (1)
JRST SWFIND
SOJGE 2,.-3
JRST BADSWI
XSWIT: TRO F,XSEEN
MOVE 3(5)
MOVEM XPPN
MOVE CURDEV
MOVEM XDEV
TRZ F,FILSEN
JRST NXTCHR
SWFIND: HLL F,1
SKIPN (5)
JRST XSWIT
JRST NXTCHR
SWTAB: XWD A,"A"
XWD C,"C"
XWD D,"D"
XWD E,"E"
XWD L,"L"
SWCNT=.-SWTAB-1
PPN: MOVE 2,FILPTR
SETZ 1,
PUSHJ P,CMDCHR
JUMPE PPNFIN
CAIN 40
JRST PPN+2
CAIE "←"
CAIN "="
JRST PPNBF
CAIN "]"
JRST PPNBAK
CAIN ","
JRST PPNHAF
CAIN "!"
JRST PPNRUN
CAILE "7"
JRST BADPPN
SUBI 60
TRNE 1,700000
JRST ILLCHR
LSH 1,3
ADD 1,
JRST PPN+2
PPNFIN: HRRM 1,FILES+3(2)
JRST CR
PPNBF: HRRM 1,FILES+3(2)
TRNN F,XSEEN
JRST .+3
MOVE 1,FILES+3(2)
MOVEM 1,XPPN
JRST BAKARW
PPNBAK: HRRM 1,FILES+3(2)
JRST NXTCHR
PPNHAF: HRLM 1,FILES+3(2)
JRST PPN+1
PPNRUN: HRRM 1,FILES+3(2)
JRST RUNIT
CONTIN: OUTCHR ["*"]
PUSHJ P,CMDCHR
JUMPN .-1
MOVEI 5
ADDM FILPTR
POPJ P,
CPOPJ1: AOS (P)
CPOPJ: POPJ P,
CMDCHR: SKIPE CCL
PUSHJ P,CCLCHR
INCHWL
CAIN 32
EXIT
CAIE 33
CAIN 175
JRST ALTMOD
CAIN 15
JRST GETLF
CAIN 12
JRST ALTMOD
TRO F,CHRTYP
TRNE F,ANYCHR
POPJ P,
PUSH P,1
CAIE "*"
JRST .+3
HLLZ 1,(5)
JUMPE 1,GODCHR+1
PUSH P,2
MOVEI 2,BRKCNT
MOVE 1,BRKTAB(2)
CAIN (1)
JRST GODCHR
SOJGE 2,.-3
POP P,2
POP P,1
CAIE "?"
CAIN "]"
POPJ P,
CAIGE "0"
JRST ILLCHR
CAIG "9"
POPJ P,
CAIL "A"
CAILE "Z"
JRST ILLCHR
POPJ P,
GETLF: SKIPE CCL
PUSHJ P,CCLCHR
INCHWL
ALTMOD: SETZ
POPJ P,
GODCHR: POP P,2
POP P,1
POPJ P,
CCLCHR: ILDB CCLPNT
JUMPN CPOPJ1
SETZM CCL
EXIT 1,
EXIT
HELP: PUSHJ P,EATMUP
OPEN SYSBLK
JRST NOHELP
LOOKUP SYSHLP
JRST NOHELP
SETZM DIRECT+200
IN HLPWRD
JRST .+2
JRST FIN
OUTSTR DTANAM
JRST HELP+6
FIN: RELEAS
JRST RENTER
;
; GETWRD GETS ONE WORD OF DATA FROM CHANNEL 0
; IF AN EOF IS FOUND CONTROL IS TRANSFERED TO (XFER)
; THROUGH DATAIN. SKPFLG IS USED TO DETERMINE IF ANOTHER
; POP IS NEEDED TO RESTORE THE PUSH DOWN STACK RIGHT
;
GETWRD: SOSGE IBUF+2
JRST MORDAT
ILDB IBUF+1
POPJ P,
MORDAT: PUSHJ P,DATAIN
JRST GETWRD
;
; PUTWRD PUTS ONE WORD OF DATA OUT ON CHANNEL 1
; FAILURE BOMBS THE CURRECT EXCON COMMAND AND RETURNS TO
; COMMAND LEVEL EXCEPT IN THE CASE OF /E WHERE IT GOES TO
; A SPECIAL ROUTINE TO TIE UP ENDS
;
PUTWRD: TRNE F,TTYOUT
JRST TTYCHR
SOSGE OBUF+2
JRST OUTDAT
IDPB OBUF+1
POPJ P,
TTYCHR: PUSH P,1
PUSH P,2
MOVEI 2,4
MOVEM 1
LSHC 7
PUSHJ P,PUTWRD+2
SOJGE 2,.-2
POP P,2
POP P,1
POPJ P,
OUTDAT: PUSHJ P,OUTIT
JRST PUTWRD+2
DATAIN: IN
POPJ P,
POP P,
POP P,
TRZE F,SKPFLG
POP P,
STATZ 20000
JRST (XFER)
PUSHJ P,INERR
JRST (XFER)
OUTIT: OUT 1,
POPJ P,
PUSHJ P,OUTERR
TLNE F,E
JRST XPNER2
RELEAS 1,
RELEAS
JRST RENTER
NODEV: MOVE 1,2(1)
OUTSTR [ASCIZ/?DEVICE /]
PUSHJ P,SIXPNT
OUTSTR [ASCIZ/ DOES NOT EXIST
/]
JRST RENTER
NODSK: MOVSI 1,'DSK'
JRST NOTAVL+1
NOTAVL: MOVE 1,2(1)
OUTSTR [ASCIZ/?DEVICE /]
PUSHJ P,SIXPNT
OUTSTR [ASCIZ/ IS NOT AVAILABLE
/]
JRST RENTER
FILINR: HLLI EXT.,
MOVE DEV.,OPBLKI+1
OUTSTR [ASCIZ/?LOOKUP FAILURE ON FILE /]
PUSHJ P,FILPNT
JRST RENTER
HLLI EXT.,
MOVE DEV.,OPBLKO+1
OUTSTR [ASCIZ/?ENTER FAILURE ON FILE /]
PUSHJ P,FILPNT
JRST RENTER
;
; FILPNT TAKES THE FILE IN ACS FILE. THROUGH PPN. AND
; PRINTS IT ALONG WITH AN ERROR CODE DETERMINED FROM
; RIGHT HALF OF THE EXT.
;
FILPNT: HRRZ 3,EXT.
IDIVI 3,2
MOVE 3,ERRTAB(3)
JUMPN 4,.+2
HLRZ 3,3
MOVE DEV.
DEVCHR
TLNN DV.DTA
JRST .+4
CAIN 3,PROTEC
MOVEI 3,DTAFUL
TRO F,TYPPPN
MOVE 1,DEV.
PUSHJ P,SIXPNT
OUTCHR [":"]
TRNE F,UFDERR
JRST SETPPN
MOVE 1,FILE.
PUSHJ P,SIXPNT
HLLZ 1,EXT.
JUMPE 1,.+3
OUTCHR ["."]
PUSHJ P,SIXPNT
TRZE F,TYPPPN
JRST PNTERR
PNTPPN: OUTCHR ["["]
HLRZ PPN.
PUSHJ P,OCTPNT
OUTCHR [","]
HRRZ PPN.
PUSHJ P,OCTPNT
OUTCHR ["]"]
TRNE F,UFDERR
OUTSTR [ASCIZ/.UFD/]
PNTERR: OUTSTR (3)
POPJ P,
SETPPN: MOVE PPN.,FILE.
JRST PNTPPN
RENER2: HRR EXT.,ZEROS+1
RENERR: OUTSTR [ASCIZ/?RENAME FAILURE ON FILE /]
MOVSI DEV.,'DSK'
MOVE PPN.,JOBPPN
PUSHJ P,FILPNT
TRNN F,RENMES
OUTSTR [ASCIZ/?UNABLE TO FORM BACKUP FILE
/]
JRST RENTER
;
; SIXPNT DUMPS AC 1 ON THE TTY WITH TRAILING BLANKS IGNORED
;
SIXPNT: SETZ
LSHC 6
ADDI 40
OUTCHR
JUMPE 1,CPOPJ
JRST SIXPNT
;
; OCTPNT PRINTS AC 0 AS AN OCTAL NUMBER ON THE TTY
;
OCTPNT: IDIVI 10
HRLM 1,(P)
SKIPE
PUSHJ P,OCTPNT
HLRZ (P)
ADDI 60
OUTCHR
POPJ P,
BADEV: MOVE 1,2(1)
OUTSTR [ASCIZ/?ILLEGAL DEVICE /]
PUSHJ P,SIXPNT
OUTSTR CRLF
JRST RENTER
;
; USING A POINTER GIVEN IN AC 1, INFILE LOADS FILE. THROUGH PPN.
; AND PERFORMS A LOOKUP ON THAT FILE. IF SUCCESSFUL, CONTROL RETURNS
; TO CALL+2, OTHERWISE CALL+1. IF AN ERROR DOES OCCUR, IT IS
; PRINTED ON THE TTY
;
INFILE: MOVE FILE.,(1)
MOVE EXT.,1(1)
MOVE PPN.,3(1)
MOVE DEV.,2(1)
MOVEM DEV.,OPBLKI+1
DEVCHR DEV.,
JUMPE DEV.,NODEV
OPEN OPBLKI
JRST NOTAVL
PUSH P,PPN.
LOOKUP FILE.
JRST INFERR
POP P,PPN.
LDB DATE.,[POINT 3,EXT.,20]
LSH DATE.,↑D12
TDZ DEV.,[XWD -1,770000]
ADD DATE.,DEV.
MOVE DEV.,OPBLKI+1
IN
JRST CPOPJ1
STATZ 20000
JRST CPOPJ1
PUSHJ P,INERR
RELEAS
POPJ P,
INFERR: OUTSTR [ASCIZ/?LOOKUP FAILURE ON FILE /]
MOVE DEV.,OPBLKI+1
PUSHJ P,FILPNT
RELEAS
POP P,PPN.
POPJ P,
;
; AS IN INFILE, THIS IS THE SAME EXCEPT AN ENTER IS PERFORMED
;
OUTFIL: MOVE 2(1)
MOVEM OPBLKO+1
DEVCHR
JUMPE NODEV
TLNE F,L
SETZM OPBLKO
TLNN DV.TTY!DV.LPT
JRST .+3
TRO F,TTYOUT
SETZM OPBLKO
OPEN 1,OPBLKO
JRST NOTAVL
TRNE F,TTYOUT
JRST OTFERR-5
MOVE FILE.,(1)
HLLZ EXT.,1(1)
MOVE PPN.,3(1)
HRRZ DEV.,EXT.
HRRZ EXT.
LSH -↑D12
DPB [POINT 3,EXT.,20]
PUSH P,PPN.
ENTER 1,FILE.
JRST OTFERR
POP P,PPN.
OUT 1,
JRST CPOPJ1
PUSHJ P,OUTERR
RELEAS 1,
POPJ P,
OTFERR: OUTSTR [ASCIZ/?ENTER FAILURE ON FILE /]
MOVE DEV.,OPBLKO+1
POP P,PPN.
PUSHJ P,FILPNT
RELEAS 1,
POPJ P,
;
; SKPFIL PASSES THROUGH ONE SUBFILE OF THE EXCON FILE ON CHANNEL 0
;
SKPFIL: TRO F,SKPFLG
PUSHJ P,GETWRD
CAME BGNCOD
JRST SKPFIL+1
PUSHJ P,GETWRD
MOVEM FILE2.
PUSHJ P,GETWRD
HLLM EXT2.
PUSHJ P,GETWRD
HLRM EXT2.
SKPFL.: PUSHJ P,GETWRD
CAME ENDCOD
JRST SKPFL.
PUSHJ P,GETWRD
CAME FILE2.
JRST SKPFL.
PUSHJ P,GETWRD
CAME EXT2.
JRST SKPFL.
TRZ F,SKPFLG
POPJ P,
;
; MAKDIR FORMS A DIRECTORY OF THE EXCON FILE POINTED TO BY AC 1
; IN DIRECT. ENTRIES ARE:
;
; SIXBIT/FILE/
; XWD "EXT", DATE
; SIXBIT/DEVICE/
; PPN
;
MAKDIR: PUSHJ P,INFILE
POPJ P,
MOVEI XFER,MDFIN
SETZ CNT,
PUSHJ P,GETWRD
CAME BGNCOD
JRST .-2
PUSHJ P,GETWRD
MOVEM DIRECT(CNT)
PUSHJ P,GETWRD
MOVEM DIRECT+1(CNT)
HLL EXT2.,
PUSHJ P,GETWRD
HRRM DIRECT+1(CNT)
HLR EXT2.,
MOVE FILE2.,DIRECT(CNT)
TRO F,SKPFLG
PUSHJ P,SKPFL.
ADDI CNT,4
CAIGE CNT,<DIRFIL*4>
JRST MAKDIR+4
OUTSTR [ASCIZ/?TOO MANY SUBFILES IN /]
PUSHJ P,PNTFIL
MDFIN: RELEAS
SETZM DIRECT(CNT)
JRST CPOPJ1
INERR: GETSTS
OUTSTR [ASCIZ/?READ ERROR /]
SETZ 3,
MOVEI 2,FILE.
TLNE F,E
MOVE 2,ARROW
INERR2: PUSH P,
PUSHJ P,OCTPNT
OUTSTR [ASCIZ/ ON /]
MOVE 1,2(2)
PUSHJ P,SIXPNT
OUTCHR [":"]
MOVE 1,(2)
JUMPE 1,NOFNAM
PUSHJ P,SIXPNT
HLLZ 1,1(2)
JUMPE 1,.+3
OUTCHR ["."]
PUSHJ P,SIXPNT
MOVE 3
DEVCHR
TLNE DV.DTA
JRST NOFNAM
OUTCHR ["["]
HLRZ 3(2)
PUSHJ P,OCTPNT
HRR 3(2)
OUTCHR [","]
PUSHJ P,OCTPNT
OUTSTR [BYTE (7) "]", 15, 12]
NOFNAM: POP P,
SETZ 1,
TRNE IO.IMP
MOVEI 1,DEVWL
TRNE IO.DTE
MOVEI 1,DEVPAR
TRNE IO.BKT
MOVEI 1,DEVBKT
JUMPN 1,TYPMES
TRNN IO.DER
JRST CPOPJ
MOVEI 1,DEVSEK
MOVE 3
DEVCHR
TLNE DV.DTA
MOVEI 1,DEVDAT
TYPMES: OUTSTR (1)
POPJ P,
OUTERR: GETSTS 1,
OUTSTR [ASCIZ/?WRITE ERROR /]
MOVEI 3,1
MOVEI 2,FILES
TLNE F,E
MOVEI 2,FILE.
JRST INERR2
;
; WLDDIR IS A SUBROUTINE TO FIND AND MARK FILES IN DIRECT.
; ON RETURN (TO CALL+2, IF CALL+1--DONE) AC 1 CONTAINS A POINTER
; TO THE MARKED FILE. AC PNT CONTAINS XWD DIRECT,,ADR OF LEFT FILE
; LIST ON STARTUP; AC FILE. THE ADR OF THE RIGHT FILE LIST.
; PNT, AND FILE. ARE INCREMENTED AUTOMATICALLY WITH THE RIGHT
; HALF OF PNT POINTING TO THE LEFT FILE LIST.
;
WLDDIR: CAMN FILE.,FILEND
POPJ P,
HLRZ 3,PNT
MOVE (3)
JUMPE UPDATE
MOVE 1,(FILE.)
CAMN 1,STAR
JRST WLDEXT
AND 4(FILE.)
CAME (FILE.)
JRST UPDAT1
WLDEXT: HLLZ 1(FILE.)
CAMN STAR
JRST GOTIT
MOVE 1,1(3)
HRLZ 2,1(FILE.)
AND 1,2
CAME 1
JRST UPDAT1
GOTIT: MOVE 1(3)
TROE MARK
JRST UPDAT1
TRO F,FILSPC
MOVEM 1(3)
MOVE 1,3
ADD PNT,[XWD 4,0]
PUSHJ P,WLDCHK
JRST CPOPJ1
HRLI PNT,DIRECT
ADDI PNT,5
ADDI FILE.,5
JRST CPOPJ1
UPDAT1: ADD PNT,[XWD 4,0]
JRST WLDDIR+2
UPDATE: ADDI PNT,5
ADDI FILE.,5
HRLI PNT,DIRECT
JRST WLDDIR
;
; WLDCHK CHECKS TO SEE IF THE FILE IN LOCATION @1 IS A VALID
; FILE NAME OR HAS STARS AND/OR QUESTION MARKS IN IT. RETURNS
; ARE TO CALL+1 IF WILD OR TO CALL+2 IF THE FILE IS VALID.
;
WLDCHK: MOVE 4(1)
CAME [-1]
POPJ P,
HRRO 1(1)
CAME [-1]
POPJ P,
MOVE (1)
CAMN STAR
POPJ P,
HLLZ 1(1)
CAMN STAR
POPJ P,
JRST CPOPJ1
NOUSE: OUTSTR [ASCIZ/?NO FILES SPECIFIED
/]
JRST RENTER
;
; DMPFIL IS SIMILAR TO SKPFIL EXCEPT THAT THE INPUT IS PASSED TO
; THE OUTPUT FILE RATHER THAN BEING JUST DUMPED INTO OBLIVIATION
;
DMPFIL: PUSHJ P,GETWRD
PUSHJ P,PUTWRD
CAME BGNCOD
JRST DMPFIL
PUSHJ P,GETWRD
PUSHJ P,PUTWRD
MOVEM FILE2.
PUSHJ P,GETWRD
PUSHJ P,PUTWRD
HLLM EXT2.
PUSHJ P,GETWRD
HLRM EXT2.
DMP1: PUSHJ P,PUTWRD
PUSHJ P,GETWRD
CAME ENDCOD
JRST DMP1
PUSHJ P,PUTWRD
PUSHJ P,GETWRD
CAME FILE2.
JRST DMP1
PUSHJ P,PUTWRD
PUSHJ P,GETWRD
CAME EXT2.
JRST DMP1
PUSHJ P,PUTWRD
POPJ P,
;
; PUTDAT PRINTS THE DATE GIVEN IN AC0 ON CHANNEL 1
;
PUTDAT: PUSH P,2
PUSH P,3
MOVEM 2
IDIVI 2,↑D31
MOVEI 40
CAIGE 3,↑D9
PUSHJ P,PUTCHR
MOVEI 1(3)
PUSHJ P,PUTDEC
MOVEI "-"
PUSHJ P,PUTCHR
IDIVI 2,↑D12
MOVEI 1,MONTHS(3)
PUSHJ P,PUTSTR
MOVEI ↑D64(2)
PUSHJ P,PUTDEC
POP P,3
POP P,2
POPJ P,
;
; PUTSTR PUTS THE ASCIZ STRING ADDRESSED BY AC 1 INTO THE OUTPUT FILE
;
PUTSTR: HRLI 1,440700
ILDB 1
JUMPE CPOPJ
PUSHJ P,PUTCHR
JRST PUTSTR+1
;
; PUTCHR DUMPS THE CHARACTER IN AC0 INTO THE OUTPUT BUFFER
;
PUTCHR: SOSGE OBUF+2
JRST PUTOUT
IDPB OBUF+1
POPJ P,
PUTOUT: PUSHJ P,OUTIT
JRST PUTCHR
;
; PUTSIX DUMPS THE SIXBIT WORD IN AC1 WITH TRAILING BLANKS
;
PUTSIX: PUSH P,2
MOVEI 2,5
SETZ
LSHC 6
ADDI 40
PUSHJ P,PUTCHR
SOJGE 2,PUTSIX+2
POP P,2
POPJ P,
;
; PUTSXN IS THE SAME AS PUTSIX BUT TRAILING BLANKS ARE NOT PRINTED
;
PUTSXN: SETZ
LSHC 6
ADDI 40
PUSHJ P,PUTCHR
JUMPN 1,PUTSXN
POPJ P,
;
; PUTDEC DUMPS AC0 AS A DECIMAL NUMBER ON THE OUTPUT FILE
;
PUTDEC: IDIVI ↑D10
HRLM 1,(P)
SKIPE
PUSHJ P,PUTDEC
HLRZ (P)
ADDI 60
PUSHJ P,PUTCHR
POPJ P,
;
; WLDUFD IS SIMILER TO WLDDIR EXCEPT THAT FILES ARE SCANNED FOR
; ON THE DSK (OR DTA) NOT DIRECT. THE SET UP IS:
;
; PNT: XWD ADR RIGHT FILE LIST,ADR LEFT FILE LIST
;
; RESULTS ARE PUT IN ACS FILE. THROUGH PPN.
; THE FLAG FILINC MUST BE OFF (0) THE FIRST TIME WLDUFD IS CALLED.
;
; CHANNEL TWO IS USED TO LOOKUP UP THE UFD OR DTA DIRECTORY.
;
; RETURN IS TO CALL+2 IF MORE IS TO COME, OTHERWISE TO FILE+1
; IF NO MORE IS THERE.
;
WLDUFD: HLRZ 3,PNT
CAMN 3,FILEND
POPJ P,
TRNE F,DSKUFD
JRST DSKFIL
TRNE F,DTAUFD
JRST DTAFIL
MOVE 1,3
PUSHJ P,WLDCHK
JRST WILDGO
TROE F,FILINC
ADDI PNT,5
MOVE FILE.,(3)
HLLZ EXT.,1(3)
MOVE DEV.,2(3)
MOVE PPN.,3(3)
ADD PNT,[XWD 5,0]
JRST CPOPJ1
WILDGO: TROE F,FILINC
ADDI PNT,5
MOVE 2(3)
MOVE 1,2(3)
MOVEM 1,OPUFD+1
DEVCHR
JUMPE NODEV+1
TLNE DV.DTA
JRST DTADIR
TLNN DV.DSK
JRST BADEV+1
MOVE FILE.,3(3)
MOVSI EXT.,'UFD'
MOVE DEV.,1
MOVE PPN.,[XWD 1,1]
MOVEI 10
MOVEM OPUFD
MOVEI UFDBUF
MOVEM OPUFD+2
OPEN 2,OPUFD
JRST NOTAVL+1
TRO F,DSKUFD
LOOKUP 2,FILE.
JRST NOUFD
IN 2,
JRST DSKFIL
TRO F,UFDERR
JRST UFDIN+2
DSKFIL: PUSHJ P,GETUFD
MOVEM FILE.
PUSHJ P,GETUFD
HLLZM EXT.
JRST WLDMAT
DTADIR: MOVEI 17
MOVEM OPUFD
SETZM OPUFD+2
OPEN 2,OPUFD
JRST NOTAVL+1
USETI 2,↑D100
IN 2,DTAWRD
JRST DTAGO
OUTSTR [ASCIZ/?READ ERROR /]
GETSTS 2,
PUSHJ P,OCTPNT
OUTSTR [ASCIZ/ ON DEVICE /]
PUSHJ P,SIXPNT
OUTSTR CRLF
JRST UFDONE
DTAGO: RELEAS 2,
SETZM DTANAM
TRO F,DTAUFD
DTAFIL: AOS 1,DTANAM
CAIN 1,↑D23
JRST UFDONE
MOVE FILE.,DTANAM+↑D81(1)
HLLZ EXT.,DTANAM+↑D103(1)
WLDMAT: MOVE (3)
CAMN STAR
JRST WLDEXC
MOVE FILE.
AND 4(3)
CAME (3)
JRST WLDUFD+3
WLDEXC: HLLZ 2,1(3)
CAMN 2,STAR
JRST WILDOK
HRLO 1,1(3)
MOVE EXT.
AND 1
CAME 2
JRST .+4
WILDOK: MOVE DEV.,2(3)
MOVE PPN.,3(3)
JRST CPOPJ1
TLNN F,L
JRST WLDUFD+3
CAMN EXT.,[SIXBIT/XCN/]
JUMPE 2,WILDOK
JRST WLDUFD+3
GETUFD: SOSGE UFDBUF+2
JRST MORUFD
ILDB UFDBUF+1
JUMPE GETUFD
POPJ P,
MORUFD: PUSHJ P,UFDIN
JRST GETUFD
UFDIN: IN 2,
POPJ P,
STATZ 2,20000
JRST UFDONE
OUTSTR [ASCIZ/?ERROR /]
GETSTS 2,
PUSHJ P,OCTPNT
OUTSTR [ASCIZ/ WHILE READING [/]
HLRZ 3(3)
PUSHJ P,OCTPNT
OUTCHR [","]
HRRZ 3(3)
PUSHJ P,OCTPNT
OUTSTR [ASCIZ/].UFD
/]
UFDONE: RELEAS 2,
TRZ F,DSKUFD
ADD PNT,[XWD 5,0]
TRZE F,UFDERR!DTAUFD
JRST .+3
POP P,
POP P,
JRST WLDUFD
NOUFD: TRO F,UFDERR
OUTSTR [ASCIZ/?LOOKUP FAILURE ON DIRECTORY /]
PUSHJ P,FILPNT
JRST UFDONE
;
; XCNCHK CHECKS THE FILE POINTED TO BY AC1 AND PUTS IN THE
; XCN EXTENSION IF NECESSARY
;
XCNCHK: MOVE 2(1)
MOVEM OPBLKI+1
OPEN OPBLKI
JRST NOTAVL
MOVE FILE.,(1)
HLLZ EXT.,1(1)
MOVE PPN.,3(1)
PUSH P,PPN.
LOOKUP FILE.
JRST .+2
JRST DEVRES
JUMPN EXT.,INFERR
MOVSI EXT.,'XCN'
LOOKUP FILE.
JRST INFERR
HLLM EXT.,1(1)
DEVRES: MOVE DEV.,OPBLKI+1
POP P,PPN.
JRST CPOPJ1
;
; COMIT DUMPS THE NECESSARY HEADER AND TRAILER INFORMATION
; AS WELL AS THE SUBFILE TO BE DUMPED OUT ON THE OUTPUT FILE.
; THE FILE NAME USED IS GIVEN IN FILE2. AND EXT2.
;
COMIT: MOVE BGNCOD
PUSHJ P,PUTWRD
MOVE FILE2.
PUSHJ P,PUTWRD
MOVE EXT2.
PUSHJ P,PUTWRD
TIMER
HRRM EXT2.
MOVSS
HRR DATE.
PUSHJ P,PUTWRD
MOVEI XFER,COMFIN
PUSHJ P,GETWRD
PUSHJ P,PUTWRD
JRST .-2
COMFIN: MOVE ENDCOD
PUSHJ P,PUTWRD
MOVE FILE2.
PUSHJ P,PUTWRD
MOVE EXT2.
PUSHJ P,PUTWRD
POPJ P,
;
; FNDFIL TRIES TO FIND FILE. AND EXT. IN DIRECT
; RETURNS TO CALL+1 IF FOUND, CALL+2 IF NOT FOUND
;
FNDFIL: SETZ 1,
SKIPN DIRECT(1)
JRST CPOPJ1
HLLZ EXT2.
HLLZ 2,DIRECT+1(1)
CAMN 2
CAME FILE2.,DIRECT(1)
JRST FNDMOR
TLNN F,A
JRST CPOPJ
MOVEI MARK
IORM DIRECT+1(1)
POPJ P,
FNDMOR: ADDI 1,4
JRST FNDFIL+1
;
; NEWFIL TAKES PNT AS DEFINED IN WLDUFD AND FILE. AND EXT.
; AND PRODUCES A NEW FILE NAME IN FILE2. AND EXT. DEPENDING
; ON THE LEFT FILE LIST (IF THERE IS ONE; OTHERWISE USE
; THE FILE NAME IN FILE. AND EXT.
;
NEWFIL: MOVE FILE2.,FILE.
HLLZ EXT2.,EXT.
TRNN F,FILST
POPJ P,
HLRZ 1,PNT
MOVE FILE2.,(PNT)
CAMN FILE2.,STAR
JRST SAMFIL
MOVE (1)
TDZ 4(PNT)
ADD FILE2.,
NEWEXT: HLLZ EXT2.,1(PNT)
CAMN EXT2.,STAR
JRST SAMEXT
HRLO 2,1(PNT)
HLLZ 1(1)
TDZ 2
ADD EXT2.,
POPJ P,
SAMFIL: MOVE FILE2.,FILE.
JRST NEWEXT
SAMEXT: MOVE EXT2.,EXT.
POPJ P,
EATMUP: TRO F,ANYCHR
PUSHJ P,CMDCHR
JUMPN EATMUP+1
POPJ P,
SAVFIL: POP P,1 ;GET THE ADR TO JRST BACK TO
PUSH P,FILES+1 ;SAVE REAL EXTENSION OF EXCON FILE
PUSH P,FILES+2 ;SAVE REAL DEVICE
PUSH P,FILES+3 ;AND REAL PPN
MOVSI 'BAK' ;AND READ FROM .BAK FILE
MOVEM FILES+1 ;SET FOR INPUT
MOVSI 'DSK' ;READ .BAK FROM THE DSK
MOVEM FILES+2 ;LET OUTFIL KNOW ABOUT IT
MOVE JOBPPN ;.BAK ON THIS USERS AREA
MOVEM FILES+3 ;SAVE IT FOR OUTFIL
JRST (1) ;RETURN
RSTFIL: POP P,1 ;GET THE TRANSFER ADR
POP P,FILES+3 ;RESTORE THE REAL PPN
POP P,FILES+2 ;RESTORE THE REAL DEVICE
POP P,FILES+1 ;RESTORE THE REAL EXTENSION
JRST (1) ;RETURN
;
; PNTFIL PRINTS THE FILE IN ACS FILE. THROUGH PPN.
;
PNTFIL: MOVE 1,DEV.
PUSHJ P,SIXPNT
OUTCHR [":"]
MOVE 1,FILE.
PUSHJ P,SIXPNT
HLLZ 1,EXT.
JUMPE 1,.+3
OUTCHR ["."]
PUSHJ P,SIXPNT
OUTCHR ["["]
HLRZ PPN.
PUSHJ P,OCTPNT
OUTCHR [","]
HRRZ PPN.
PUSHJ P,OCTPNT
OUTCHR ["]"]
POPJ P,
SETCCL: MOVE CCL
TLZN 777777
POPJ P,
MOVEM CCL
MOVE 1,[XWD 2,CCLBLK]
TMPCOR 1,
JRST DSKCCL
SETZM CCLBUF+1(1)
SETPNT: MOVE [POINT 7,CCLBUF]
MOVEM CCLPNT
POPJ P,
DSKCCL: PUSHJ P,SIXJBN
HRRI FILE.,'XCN'
MOVSI EXT.,'TMP'
SETZB DEV.,PPN.
MOVSI 'DSK'
MOVEM OPZ+1
OPEN OPZ
JRST NODSK
LOOKUP FILE.
JRST NOCCL
IN CCLBLK+1
JRST DELCCL
OUTSTR [ASCII/?XCNCRC CANNOT READ CCL FILE
/]
RELEAS
JRST CCLCHR+2
NOCCL: RELEAS
SETZM CCL
JRST RENTER
DELCCL: RENAME ZEROS
JFCL
RELEAS
JRST SETPNT
SIXJBN: PJOB EXT.,
IDIVI EXT.,12
MOVSI PPN.,20(DEV.)
IDIVI EXT.,12
MOVSI FILE.,202000
LSH EXT.,↑D30
LSH DEV.,↑D24
ADD FILE.,EXT.
ADD FILE.,DEV.
ADD FILE.,PPN.
POPJ P,
TYPSTR: SKPINC
JFCL
OUTCHR ["*"]
POPJ P,
NOARRW: OUTSTR [ASCIZ/?NO BACK ARROW OR EQUAL SIGN
/]
JRST RENTER
MNYFIL: PUSHJ P,EATMUP
OUTSTR [ASCIZ/?TOO MANY FILES MENTIONED
/]
JRST RENTER
NOFUNC: OUTSTR [ASCIZ/?YOU DIDN'T TELL ME WHAT TO DO
/]
JRST RENTER
NULR: OUTSTR [ASCIZ/?NULL FILE SPECS ON RIGHT SIDE OF BACK ARROW OR EQUAL SIGN
/]
JRST RENTER
NULL: OUTSTR [ASCIZ/?NULL FILE SPECS ON LEFT SIDE OF BACK ARROW OR EQUAL SIGN
/]
JRST RENTER
BADLST: OUTSTR [ASCIZ/?FILE LISTS ARE OF DIFFERENT LENGTHS
/]
JRST RENTER
MNYARW: PUSHJ P,EATMUP
OUTSTR [ASCIZ/?TOO MANY BACK ARROWS OR EQUAL SIGNS
/]
JRST RENTER
ILLCHR: PUSHJ P,EATMUP
OUTSTR [ASCIZ/?ILLEGAL CHARACTER
/]
JRST RENTER
NOWILD: OUTSTR [ASCIZ/?WILD CARD FILE NAME ILLEGAL
/]
JRST RENTER
LSTSEN: OUTSTR [ASCIZ/?FILE LIST FOUND ON LEFT SIDE OF BACK ARROW OR EQUAL SIGN
/]
JRST RENTER
BADPPN: PUSHJ P,EATMUP
OUTSTR [ASCIZ/?BAD PPN
/]
JRST RENTER
BADFNC: OUTSTR [ASCIZ/?UNDEFINED SWITCH
/]
JRST RENTER
BADSWI: OUTSTR [ASCIZ/?UNDEFINED SWITCH
/]
JRST .+2
DBLSWI: OUTSTR [ASCIZ/%SIMULTANOUS FUNCTIONS ILLEGAL
/]
PUSHJ P,EATMUP
JRST RENTER
NOHELP: OUTSTR [ASCIZ/%I'M SORRY, I CAN'T HELP YOU
/]
JRST RENTER
SUBTTL HISEG DATA G. Ross Explorations, Inc.
BGNCOD: 101010101010
ENDCOD: 010101010101
STAR: SIXBIT/*/
DEVWL: ASCIZ/?SOFTWARE DEVICE WRITE LOCK
/
DEVPAR: ASCIZ/?DEVICE PARITY ERROR
/
DEVBKT: ASCIZ/?BLOCK OR BLOCK NUMBER TOO LARGE
/
DEVSEK: ASCIZ/?DSK SEEK ERROR
/
DEVDAT: ASCIZ/?DATA MISSED
/
CRLF: BYTE (7) 15,12
ERRTAB: XWD NOFILE,UFDPPN
XWD PROTEC,FILMOD
XWD EXIST,ILLUUO
XWD DATAER,NOSAVE
XWD NOCORE,DEVUAV
XWD NOTDEV,NO2REG
XWD NOROOM,WLERR
XWD NOMCOR,PARALC
XWD BLKNOF,SUPDIR
XWD DELDIR,NOSFD
XWD SLEMPT,SFDLVL
XWD UFDEFT,LOCSEG
NOFILE: ASCIZ/: (0) FILE NOT FOUND
/
UFDPPN: ASCIZ/: (1) NO UFD FOR GIVEN PPN
/
PROTEC: ASCIZ/: (2) PROTECTION FAILURE
/
DTAFUL: ASCIZ/: (2) DTA DIRECTORY FULL
/
FILMOD: ASCIZ/: (3) FILE BEING MODIFIED
/
EXIST: ASCIZ/: (4) ALREADY EXISTING FILE NAME
/
ILLUUO: ASCIZ/: (5) ILLEGAL SEQUENCE OF UUO'S
/
DATAER: ASCIZ/: (6) RIB OR UFD ERROR
/
NOSAVE: ASCIZ/: (7) NOT A SAVED FILE
/
NOCORE: ASCIZ/: (10) NOT ENOUGH CORE
/
DEVUAV: ASCIZ/: (11) DEVICE NOT AVAILABLE
/
NOTDEV: ASCIZ/: (12) NO SUCH DEVICE
/
NO2REG: ASCIZ/: (13) NO TWO REGISTER RELOCATION
/
NOROOM: ASCIZ/: (14) NO ROOM OR QUOTA EXCEEDED
/
WLERR: ASCIZ/: (15) DSK WRITE LOCKED
/
NOMCOR: ASCIZ/: (16) MONITOR HAS NO FREE TABLE SPACE
/
PARALC: ASCIZ/: (17) PARTIAL DSK SPACE ALLOCATION
/
BLKNOF: ASCIZ/: (20) BLOCK NOT FREE
/
SUPDIR: ASCIZ/: (21) CANNOT SUPERSEDE EXISTING DIRECTORY
/
DELDIR: ASCIZ/: (22) CANNOT DELETE NON-EMPTY UFD
/
NOSFD: ASCIZ/: (23) SFD NOT FOUND
/
SLEMPT: ASCIZ/: (24) SEARCH LIST EMPTY
/
SFDLVL: ASCIZ/: (25) MAXIMUM SFD NESTING LEVEL EXCEEDED
/
UFDEFT: ASCIZ/: (26) CANNOT FIND WRITE-ENABLED DSK
/
LOCSEG: ASCIZ/: (27) HISEG NOT DORMANT
/
MONTHS: MONGEN <Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec>
LIT
END START